﻿using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using GalaSoft.MvvmLight.Messaging;
using NLog;
using OneOfAll.Common.Models;

namespace OneOfAll.Common.Util
{
    public class LogHelper
    {
        private readonly NLog.Logger _logger = LogManager.GetCurrentClassLogger();

        private static LogHelper _obj;


        public static LogHelper Instance
        {
            get => _obj ?? (_obj = new LogHelper());
            set => _obj = value;
        }

        public void GetLog(LogTypeEnum type, string msg, Exception ex = null)
        {


            switch (type)
            {
                case LogTypeEnum.Debug:
                    if (ex != null)
                        Debug(msg, ex);
                    else
                        Debug(msg);
                    break;
                case LogTypeEnum.Info:
                    if (ex != null)
                        Info(msg, ex);
                    else
                        Info(msg);
                    break;
                case LogTypeEnum.Warn:
                    if (ex != null)
                        Warn(msg, ex);
                    else
                        Warn(msg);
                    break;
                case LogTypeEnum.Error:
                    if (ex != null)
                        Error(msg, ex);
                    else
                        Error(msg);
                    break;
            }
        }

        private void Debug(string msg)
        {
            _logger.Debug(msg);
        }

        private void Debug(string msg, Exception err)
        {
            _logger.Debug(err, msg);
        }

        private void Info(string msg)
        {
            _logger.Info(msg);
        }

        private void Info(string msg, Exception err)
        {
            _logger.Info(err, msg);
        }

        private void Warn(string msg)
        {
            _logger.Warn(msg);
        }

        private void Warn(string msg, Exception err)
        {
            _logger.Warn(err, msg);
        }

        private void Trace(string msg)
        {
            _logger.Trace(msg);
        }

        private void Trace(string msg, Exception err)
        {
            _logger.Trace(err, msg);
        }

        private void Error(string msg)
        {
            _logger.Error(msg);
        }

        private void Error(string msg, Exception err)
        {
            _logger.Error(err, msg);
        }

        private void Fatal(string msg)
        {
            _logger.Fatal(msg);
        }

        private void Fatal(string msg, Exception err)
        {
            _logger.Fatal(err, msg);
        }

    }
}
